package top.liushiyao.jdk8;

import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.StringJoiner;
import java.util.stream.Collectors;


/*

StringJoiner类共有2个构造函数，5个公有方法。其中最常用的方法就是add方法和toString方法，类似于StringBuilder中的append方法和toString方法。
StringJoiner其实就是依赖StringBuilder实现的,StringJoiner性能损耗应该和直接使用StringBuilder差不多！

总结：
1、如果只是简单的字符串拼接，考虑直接使用"+"即可。
2、如果是在for循环中进行字符串拼接，考虑使用StringBuilder和StringBuffer。
3、如果是通过一个集合（如List）进行字符串拼接，则考虑使用StringJoiner。
4、如果是对一组数据进行拼接，则可以考虑将其转换成Stream，并使用StringJoiner处理。

 */

public class StringJoinerDemo {

    /**
     * 基本使用
     */
    @Test
    public void Test() {

        //分隔符
        StringJoiner joiner = new StringJoiner(",")
                .add("Java")
                .add("Python")
                .add("Php");
        System.out.println(joiner.toString());

        //分隔符、前缀、后缀
        joiner = new StringJoiner(",", "[", "]");
        joiner.add("中国");
        joiner.add("美国");
        joiner.add("英国");

        System.out.println(joiner.toString());

    }

    /**
     * 结合Stream
     */
    @Test
    public void Test2() {

        List<String> list = Arrays.asList("A", "B", "C", "D");
        String join = list.stream().collect(Collectors.joining(",", "[", "]"));
        System.out.println(join);

    }

    /**
     * 拓展String.join()
     */
    @Test
    public void Test3() {

        String string = String.join(",", "123", "456", "789");
        System.out.println(string);

    }

}
